#include "reg52.h"
#include "intrins.h"
#include "delay.h"
 

sbit Trig = P1^5;
sbit Echo = P1^6;

//sbit D5 = P3^7;//设备变量led1指向P3组IO口的第7口
//sbit D6 = P3^6;//设备变量led2指向P3组IO口的第6口

void Delay15us()		//@11.0592MHz
{
	unsigned char i;

	i = 4;
	while (--i);
}


void Time1Init()

{	

	TMOD &= 0x0F;		//设置定时器模式

	TMOD |= 0x10;

	TH1 = 0;
	TL1 = 0;
	
	TF1 = 0;
	TR1 = 0;

	//设置定时器0工作模式1，初始值设定0开始数数，不着急启动定时器

}

/*

十进制2左移1位，变成20。相当于乘以10

二禁止1左移1位，变成10（2）。相当于乘以2，左移8位，乘以2的8次方=256；*/

 

void startHC()

{

	Trig = 0;

	Trig = 1;

	Delay15us();

	Trig = 0;

}


void Delay5ms()		//@11.0592MHz
{
	unsigned char i, j;

	i = 54;
	j = 199;
	do
	{
		while (--j);
	} while (--i);
}




int get_distance()

{
	double time;
	double dis;
	//定时器数据清零，以便下一次测距
		TH1 = 0;
		TL1 = 0;
	
		Delay5ms();
		//1. 让它发送波：给Trig端口至少10us的高电平

		startHC();

		//2. 开始发送波：Echo信号由低电平跳转到高电平

		while(Echo == 0);

		//   开始发送波，启动定时器

		TR1 = 1;

		//3. 接收返回波：Echo信号由高电平跳转回低电平

		while(Echo == 1);

		//   接收返回波，停止定时器

		TR1 = 0;

		//4. 计算时间

		time = (TH1 * 256 + TL1)*1.085;//us为单位
		dis = time * 0.017;
		/*if(dis < 20){

				D5 = 0;
				D6 = 1;

		}else{

				D5 = 1;
				D6 = 0;
		}*/
		
		return dis;
		
		//Delay150ms();  
		

}
